import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QVBoxLayout, QLabel
from PyQt5.QtGui import QMouseEvent, QFont, QCursor
from PyQt5.QtCore import Qt, QPoint

class CustomWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
        self.init_style()
        self.mouse_press = False  # 鼠标按下标志

    def init_ui(self):
        # 设置窗口基本属性
        self.setWindowFlags(Qt.FramelessWindowHint)  # 无边框
        self.setFixedSize(800, 600)  # 固定窗口大小
        self.setWindowTitle("自定义精美窗口")

        # 主布局
        main_layout = QVBoxLayout()
        main_layout.setContentsMargins(1, 1, 1, 1)  # 外边距
        main_layout.setSpacing(0)

        # 自定义标题栏
        self.title_bar = QWidget()
        self.title_bar.setFixedHeight(40)  # 标题栏高度
        title_layout = QHBoxLayout(self.title_bar)
        title_layout.setContentsMargins(10, 0, 10, 0)

        # 窗口图标
        self.icon_label = QLabel("✦")
        self.icon_label.setFont(QFont("Segoe UI", 14))

        # 窗口标题
        self.title_label = QLabel("我的应用")
        self.title_label.setFont(QFont("微软雅黑", 12))

        # 控制按钮（最小化、关闭）
        self.min_btn = QLabel("─")
        self.close_btn = QLabel("✕")
        self._init_control_btns()

        # 添加标题栏组件
        title_layout.addWidget(self.icon_label)
        title_layout.addWidget(self.title_label)
        title_layout.addStretch()
        title_layout.addWidget(self.min_btn)
        title_layout.addWidget(self.close_btn)

        # 内容区域（可自行添加其他控件）
        self.content_area = QWidget()

        # 组合布局
        main_layout.addWidget(self.title_bar)
        main_layout.addWidget(self.content_area)
        self.setLayout(main_layout)

    def init_style(self):
        # 窗口整体样式（Win7经典风格）
        self.setStyleSheet("""
            CustomWindow {
                background-color: #ffffff;  /* Win7窗口背景色 */
                border-radius: 2px;         /* 接近Win7的小圆角 */
                border: 1px solid #b8b8b8;  /* Win7边框颜色 */
            }
            QWidget#title_bar {
                /* Win7经典标题栏渐变（从浅蓝到深蓝） */
                background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
                    stop:0 #f0f9ff, stop:0.3 #cbebff, stop:1 #a1dbff);
            }
        """)

        # 控制按钮样式（适配Win7风格）
        btn_style = """
            QLabel {
                font-family: "Webdings";
                font-size: 16px;
                color: #333333;  /* 深灰色文字 */
                padding: 0 8px;
                border-radius: 2px;  /* 小圆角 */
            }
            QLabel:hover {
                background-color: #e5f3ff;  /* 浅蓝悬停 */
                color: #000000;
            }
            QLabel:pressed {
                background-color: #c1e0ff;  /* 更深蓝按下 */
            }
        """
        self.min_btn.setStyleSheet(btn_style)
        self.close_btn.setStyleSheet(btn_style)

        # 标题文字颜色调整（适配蓝色标题栏）
        self.title_label.setStyleSheet("color: #333333; font-weight: bold;")  # 深灰色加粗 

        # 内容区域背景（Win7经典白色）
        self.content_area.setStyleSheet("background-color: #ffffff;")

    def _init_control_btns(self):
        # 最小化按钮点击事件
        self.min_btn.mousePressEvent = lambda e: self.showMinimized()
        # 关闭按钮点击事件
        self.close_btn.mousePressEvent = lambda e: self.close()
        # 设置鼠标指针样式
        self.min_btn.setCursor(QCursor(Qt.PointingHandCursor))
        self.close_btn.setCursor(QCursor(Qt.PointingHandCursor))

    # 窗口拖动相关事件
    def mousePressEvent(self, event: QMouseEvent):
        if event.button() == Qt.LeftButton and self.title_bar.geometry().contains(event.pos()):
            self.mouse_press = True
            self.drag_pos = event.globalPos() - self.pos()
            event.accept()

    def mouseMoveEvent(self, event: QMouseEvent):
        if self.mouse_press:
            self.move(event.globalPos() - self.drag_pos)
            event.accept()

    def mouseReleaseEvent(self, event: QMouseEvent):
        self.mouse_press = False

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = CustomWindow()
    window.show()
    sys.exit(app.exec_())